/**
 * 通用浏览器缓存方法封装处理
 * Copyright (c) 2023 dfec
 */

/**
 * sessionStorage
 * 关闭当前窗口后所有存储值会被移除
 */
const sessionCache = {
    /**
     * 设置值
     * @param {String} key
     * @param {String} value
     * @returns
     */
    set(key, value) {
        if (!sessionStorage) {
            return
        }
        if (key !== null && value !== null) {
            sessionStorage.setItem(key, value)
        }
    },

    /**
     * 获取值
     * @param {String} key
     * @returns
     */
    get(key) {
        if (!sessionStorage) {
            return null
        }
        if (key === null) {
            return null
        }
        return sessionStorage.getItem(key)
    },

    /**
     * 设置值
     * @param {String} key
     * @param {Object} jsonValue
     */
    setJSON(key, jsonValue) {
        if (jsonValue !== null) {
            this.set(key, JSON.stringify(jsonValue))
        }
    },

    /**
     * 获取值
     * @param {String} key
     * @returns
     */
    getJSON(key) {
        const value = this.get(key)
        if (value !== null) {
            return JSON.parse(value)
        }
    },

    /**
     * 移除值
     * @param {String} key
     */
    remove(key) {
        sessionStorage.removeItem(key)
    }
}
/**
 * localStorage
 * 长期有效
 */
const localCache = {
    /**
     * 设置值
     * @param {String} key
     * @param {String} value
     * @returns
     */
    set(key, value) {
        if (!localStorage) {
            return
        }
        if (key !== null && value !== null) {
            localStorage.setItem(key, value)
        }
    },

    /**
     * 获取值
     * @param {String} key
     * @returns
     */
    get(key) {
        if (!localStorage) {
            return null
        }
        if (key === null) {
            return null
        }
        return localStorage.getItem(key)
    },

    /**
     * 设置值
     * @param {String} key
     * @param {Object} jsonValue
     */
    setJSON(key, jsonValue) {
        if (jsonValue !== null) {
            this.set(key, JSON.stringify(jsonValue))
        }
    },

    /**
     * 获取值
     * @param {String} key
     * @returns
     */
    getJSON(key) {
        const value = this.get(key)
        if (value !== null) {
            return JSON.parse(value)
        }
    },

    /**
     * 移除值
     * @param {String} key
     */
    remove(key) {
        localStorage.removeItem(key)
    }
}

export default {
    /**
     * 会话级缓存
     */
    session: sessionCache,

    /**
     * 本地缓存
     */
    local: localCache
}
